package fr.greta.centreFormation.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;

import com.sun.org.apache.regexp.internal.recompile;

import fr.greta.centreFormation.bean.Candidat;
import fr.greta.centreFormation.bean.Log;
import fr.greta.centreFormation.bean.Personne;

public class LogHome {

	public static int insertLog(Log unLog) throws SQLException{

		Date dateLog = unLog.getDate();
		Timestamp sqlDateLog = new Timestamp(dateLog.getTime());
		int idPersonne = unLog.getPersonne().getIdPersonne();

		System.out.println("id Personne = " + idPersonne);

		String insert = "INSERT INTO log (date_log, id_personne) VALUES (?,?)";

		Connection connection = Bdd.getConnection();
		PreparedStatement stmt = connection.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);

		stmt.setTimestamp(1, sqlDateLog);
		stmt.setInt(2, idPersonne);

		stmt.execute();

		ResultSet resultat = stmt.getGeneratedKeys();
		resultat.next();
		int idInsert = resultat.getInt(1);

		if(idInsert > 0){
			return idInsert;
		}else{
			return 0;
		}

	}

	public static ArrayList<Log> selectAllLogCandidat() throws SQLException{

		ArrayList<Log> lesLog = new ArrayList<Log>();

		String select = "SELECT * FROM log l INNER JOIN personne p ON l.id_personne = p.id_personne INNER JOIN candidat c on c.id_personne = p.id_personne ORDER BY date_log DESC";

		Connection connect = Bdd.getConnection();
		PreparedStatement stmt = connect.prepareStatement(select);

		ResultSet resulat = stmt.executeQuery();

		while(resulat.next()){

			// récupération du candidat :
			Candidat unCandidat = new Candidat();
			unCandidat.setIdPersonne(resulat.getInt(4));
			unCandidat.setNom(resulat.getString(5));
			unCandidat.setPrenom(resulat.getString(6));
			unCandidat.setMail(resulat.getString(7));
			unCandidat.setNumTel1(resulat.getString(8));
			unCandidat.setNumtel2(resulat.getString(9));
			unCandidat.setDateNaissance(resulat.getDate(10));
			unCandidat.setAdresse(resulat.getString(11));
			unCandidat.setVille(resulat.getString(12));
			unCandidat.setCodePostale(resulat.getInt(13));
			unCandidat.setLogin(resulat.getString(14));
			unCandidat.setPassword(resulat.getString(15));

			// récupération heure de connection :
			Date laDate = resulat.getTimestamp(2);

			// récupération de l'id du log :
			int idLog = resulat.getInt(1);

			// Nouveau Log et instentiation :
			Log leLog = new Log();
			leLog.setId(idLog);
			leLog.setDate(laDate);
			leLog.setPersonne(unCandidat);

			// Ajout au tableau;
			lesLog.add(leLog);
		}

		if(lesLog.isEmpty()){
			return null;
		}else {
			return lesLog;
		}



	}
	public static ArrayList<Log> selectAllLog() throws SQLException{

		ArrayList<Log> lesLog = new ArrayList<Log>();

		String select = "SELECT * FROM log l INNER JOIN personne p ON l.id_personne = p.id_personne ORDER BY date_log DESC";

		Connection connect = Bdd.getConnection();
		PreparedStatement stmt = connect.prepareStatement(select);

		ResultSet resulat = stmt.executeQuery();

		while(resulat.next()){

			// récupération du candidat :
			Personne laPersonne = new Personne();
			laPersonne.setIdPersonne(resulat.getInt(4));
			laPersonne.setNom(resulat.getString(5));
			laPersonne.setPrenom(resulat.getString(6));
			laPersonne.setMail(resulat.getString(7));
			laPersonne.setNumTel1(resulat.getString(8));
			laPersonne.setNumtel2(resulat.getString(9));
			laPersonne.setDateNaissance(resulat.getDate(10));
			laPersonne.setAdresse(resulat.getString(11));
			laPersonne.setVille(resulat.getString(12));
			laPersonne.setCodePostale(resulat.getInt(13));
			laPersonne.setLogin(resulat.getString(14));
			laPersonne.setPassword(resulat.getString(15));

			// récupération heure de connection :
			Date laDate = resulat.getTimestamp(2);

			// récupération de l'id du log :
			int idLog = resulat.getInt(1);

			// Nouveau Log et instentiation :
			Log leLog = new Log();
			leLog.setId(idLog);
			leLog.setDate(laDate);
			leLog.setPersonne(laPersonne);

			// Ajout au tableau;
			lesLog.add(leLog);
		}

		if(lesLog.isEmpty()){
			return null;
		}else {
			return lesLog;
		}
	}
	
	/**
	 * Select le nombres de log sur les 30 derniers jours
	 * @return int nbConnexion
	 * @throws SQLException
	 */
	public static int selectAllLogApres30J() throws SQLException{

		String select = "SELECT * FROM log l INNER JOIN personne p ON l.id_personne = p.id_personne WHERE date_log > DATE_SUB(CURDATE(), interval 30 DAY);";

		Connection connect = Bdd.getConnection();
		PreparedStatement stmt = connect.prepareStatement(select);
		ResultSet resulat = stmt.executeQuery();
		
		int nbConexion = 0;

		while(resulat.next()){
			
			nbConexion++;
			
		}

		return nbConexion;
	}

}
